﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Menu;
using UricaoWeb.Datos.ConexionBD.Propiedad;
using UricaoWeb.LogicaDeNegocios.Restaurantes;
using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;
using System.Windows.Forms;

namespace UricaoWeb.Presentacion
{
    public partial class API_menu_CrearMenu : API_Seguridad_Principal
    {
        List<Plato> listaPlato = new List<Plato>();
        List<UricaoWeb.Datos.ConexionBD.Propiedad.Hotel> listaHotel = new List<UricaoWeb.Datos.ConexionBD.Propiedad.Hotel>();
        UricaoWeb.LogicaDeNegocios.Menu.Menu _menu = new LogicaDeNegocios.Menu.Menu();
        List<Restaurante> listaRestaurante = new List<Restaurante>();
        List<UricaoWeb.LogicaDeNegocios.Menu.Menu> listaMenu = new List<UricaoWeb.LogicaDeNegocios.Menu.Menu>();

        ///<sumary>
        ///Metodo que se encarga de cargar la pagina
        ///Parámetros:
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();
            Logica_Usuario _usuario = (Logica_Usuario)Session["user"];
            Session["idHotel"] = _usuario.FkHotel;
           
            if (!IsPostBack) // verificar si la pagina se muestra por primera vez
            {
                desparcerLabels();
                LMensaje.Visible = false;
                listboxPlatoDisp.Items.Clear();
                this.comboHotel.Enabled = false;
                // se le asigna a la lista listaPlato todos los platos que hay en el sistema
                listaPlato = NegocioMenu.ObtenerTodosPlatos();
                listaHotel = NegocioMenu.ObtenerHoteles();
                //se recorre la lista listaPlato y se agregan los elementos al listbox PlatoDisp
                foreach (Plato iterador in listaPlato)
                {
                    if (iterador.ActivoPlato)
                    this.listboxPlatoDisp.Items.Add(iterador.NombrePlato);
                }
                foreach (Hotel it in listaHotel)
                {
                    if (it.IdHotel == int.Parse(Session["idHotel"].ToString()))
                    this.comboHotel.Items.Add(it.nombreHotel);
                }
                listaRestaurante = NegocioMenu.ObtenerRestaurantesPorHotel(int.Parse(Session["idHotel"].ToString()));
                comboRestaurant.Items.Clear();
                foreach (Restaurante rest in listaRestaurante)
                {
                    this.comboRestaurant.Items.Add(rest.NombreRestaurante);
                }
                
            }
        }

        protected void listboxPlatoDisp_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        // ocultar labels de error
        public void desparcerLabels()
        {
            LNombre.Visible = false;
            LTipo.Visible = false;
        }
        // validacion campos vacios
        public void buscarCamposVacios()
        {
            if (this.textoNombre.Text == "")
                LNombre.Visible = true;
            else
                LNombre.Visible = false;
            if (this.comboTipo.Text == "Seleccionar...")
                LTipo.Visible = true;
            else
                LTipo.Visible = false;
        }

        ///<sumary>
        ///Metodo que se encarga de pasar elementos del listbox PlatoDisp al listbox PlatoMenu
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void botonAgregar_Click(object sender, EventArgs e)
        {

            List<string> itemsborrar = new List<string>();
            // se pasan los elementos al listbox PlatoMenu
            foreach (ListItem li in listboxPlatoDisp.Items)
            {
                if (li.Selected == true)
                {
                    listboxPlatoMenu.Items.Add(li.Text);
                    itemsborrar.Add(li.Text);
                }
            }
            // se eliminan los elementos del listbox PlatoDisp
            foreach (string item in itemsborrar)
            {
                listboxPlatoDisp.Items.Remove(item);
            }

        }

        ///<sumary>
        ///Metodo que se encarga de pasar elementos del listbox PlatoMenu al listbox PlatoDisp
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void botonRemover_Click(object sender, EventArgs e)
        {
            List<string> itemsborrar = new List<string>();
            // se pasan los elementos al listbox PlatoDisp
            foreach (ListItem li in listboxPlatoMenu.Items)
            {
                if (li.Selected == true)
                {
                    listboxPlatoDisp.Items.Add(li.Text);
                    itemsborrar.Add(li.Text);

                }
            }
            // se eliminan los elementos del listbox PlatoMenu
            foreach (string item in itemsborrar)
            {
                listboxPlatoMenu.Items.Remove(item);
            }
        }

        // validar que sea string el textbox Nombre
        protected bool validarString()
        {
            String TxtBx = textoNombre.Text;
            foreach (char car in TxtBx)
            {
                if (car > '0' && car < '9')
                {
                    return false;
                }
            }
            return true;
        }

        protected bool MenuRepetido(string nombre)
        {
            listaMenu = NegocioMenu.ObtenerMenus();
            foreach (UricaoWeb.LogicaDeNegocios.Menu.Menu me in listaMenu)
            {
                if (nombre.ToUpper() == (me.NombreMenu).ToUpper())
                    return true;
            }
            return false;
        }
 
   
        ///<sumary>
        ///Metodo que se encarga de crear el Menu 
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void botonCrear_Click(object sender, EventArgs e)
        {
                if (comboTipo.Text != "Seleccionar...")
                {
                    if (textoNombre.Text != "")
                    {
                        if (validarString())
                        {
                            if (MenuRepetido(textoNombre.Text) == false)
                            {
                                int idRest = NegocioMenu.ObtenerIdRestaurante(comboRestaurant.Text);
                                // se llama al procedimiento para agregar el menu a la BD
                                NegocioMenu.AgregarMenu(textoNombre.Text, comboTipo.Text, true, idRest);
                                _menu = NegocioMenu.ObtenerMenusPorNombre(textoNombre.Text);
                                listaPlato.Clear();
                                //se agrega a la lista listaPlato los menus que estan en el listbox PlatoMenu
                                foreach (ListItem li in listboxPlatoMenu.Items)
                                {
                                    listaPlato.Add(NegocioMenu.ObtenerTodosPlatosPorNombre(li.Text));
                                }
                                // se llama al procedimiento para agregar en la tabla Men_Pla el menu con sus platos
                                foreach (Plato item in listaPlato)
                                {
                                    NegocioMenu.AgregarMenuPlato(_menu.IdMenu, item.IdPlato);

                                }
                                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "redirect script",
                               "alert('El menu ha sido creado satisfactoriamente'); location.href='API_menu_CrearMenu.aspx';", true);
                            }
                            else
                            {
                                LMensaje.Text = "Nombre de Menu ya existente. Ingrese otro nombre";
                                LMensaje.Visible = true;
                            }
                        }
                        else
                        {
                            LMensaje.Text = "Ingrese caracteres alfabéticos en el Nombre";
                            LMensaje.Visible = true;
                        }
                    }
                    else
                    {
                        desparcerLabels();
                        LMensaje.Text = "Por Favor, completar campos vacios (*)";
                        LMensaje.Visible = true;
                        buscarCamposVacios();
                    }
                }
                else
                {
                    desparcerLabels();
                    LMensaje.Text = "Por Favor, seleccione un tipo de menu (*)";
                    LMensaje.Visible = true;
                    buscarCamposVacios(); 
                }
            
        }

        ///<sumary>
        ///Metodo que carga los hoteles y dependiendo del hotel seleccionado carga sus restaurantes 
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void comboHotel_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void botonRegresar_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Presentacion/API_menu_BuscarMenu.aspx");
        }
    }
}